Traditional systems management is largely ad-hoc. Application developers do not have a structured framework for managing their applications and achieving high reliability. Many languages employed to facilitate such management architectures are inherently single threaded and add support for multitasking. Consequently, in those languages it is the responsibility of the user to achieve multitasking via operating system supported constructs such as threads.
The use of a rule-based mechanism provides flexibility in the software, enabling tasks and data to be easily changed by replacing one or more rules. The most fundamental primitive is the rule, which implements the logic to evaluate conditions and initiate actions. For example, a rule may watch the state of a system disk and report an error when the disk usage goes below a certain threshold. Another rule may monitor the processor utilization and report an error when the utilization exceeds a certain threshold. In a typical monitoring system, both rules would run simultaneously. If a user wishes to use a typical programming language, e.g., Visual Basic .Net, the user would have to write the code that schedules the rules so that the rules run concurrently, in addition to the logic that expresses the rule intent.
What is needed is an improved rule-based engine that facilitates simultaneous processing of large numbers of rules.